<template>
    <el-form ref="ruleFormRef" :model="formData" :rules="formRules" size="small" :inline="false" label-width="100px">
      <el-form-item label="主题" prop="title">
        <el-input v-model="formData.title" placeholder="请填写主题" maxlength="32" size="small"/>
      </el-form-item>
      <el-form-item label="候选人" prop="candidateId">
        <el-select v-model="formData.candidateId" placeholder="请选择候选人" size="small" filterable>
          <el-option v-for="item in candidateList" :key="item.id" :value="item.id" :label="item.name"/>
        </el-select>
      </el-form-item>
      <el-form-item label="放弃原因" prop="content">
        <editor v-model="formData.content"/>
      </el-form-item>
      <el-form-item label="备注信息" prop="remark">
        <el-input v-model="formData.remark" placeholder="请填写备注信息" type="textarea" :rows="3" size="small"/>
      </el-form-item>
      <el-form-item label="优先度">
        <el-radio-group v-model="formData.priority" size="small">
          <el-radio :label="0" size="small">普通</el-radio>
          <el-radio :label="1" size="small">高</el-radio>
        </el-radio-group>
      </el-form-item>
    </el-form>
</template>

<script>
// 放弃入职 OA_GIVE_UP_ENTRY
import {reactive, toRefs, ref, onMounted, watch, nextTick} from 'vue';
import {getListByType} from '/@/api/oa/candidate';
import {homeApi} from "/@/api/home/index";
import {format} from "/@/views/home/component/lib/utils"
import Editor from '/@/components/editor/index.vue'
import { useCalendarConfig } from '/@/stores/calendar';
import { storeToRefs } from 'pinia';

export default {
    name: 'GiveUpEntryForm',
    props: {
        selectTime: {
            type: String,
            default: null
        },
        editId: {
          type: String,
          default: null
        }
    },
    components:{
        Editor
    },
    setup(props, context) {
        const { editId, selectTime } = toRefs(props)
        const homeCalendar = homeApi();
        const ruleFormRef = ref({});
        const storesCalendarConfig = useCalendarConfig();
        const { eventForm } = storeToRefs(storesCalendarConfig)
        const state = reactive({
            formData: {
                candidateId: null,
                title: '放弃入职',
                content: null,
                remark: null,
                remindState: 'NONE',     // 提醒时间, 根据枚举类MatterRemindTimeEnum
                remindType: [],     // 提醒方式, 多选
                state: 0,           // 状态 -1草稿 0未开始 1进行中 2已完成 3已退回  4已取消 5已撤回
                priority: 0        // 优先级 0普通 1重要
            },
            candidateList: [],
            originForm: {}
        })
        const formRules = reactive({
            candidateId: {required: true, message: '请选择候选人', trigger: 'change'},
            title: {required: true, message: '请填写主题', trigger: 'blur'},
            content: {required: true, message: '请填写放弃原因', trigger: 'blur'}
        });
        let close = () => {
            context.emit("GiveUpEntryCloseCloseClose");
            reset()
        };
        let submit = () => {
            if (!ruleFormRef) return;
            return new Promise(async (resolve, reject) => {
                await ruleFormRef.value.validate((valid, fields) => {
                    if (valid) {
                        if(editId.value) {
                            // 编辑
                            for(let key in state.formData){
                            if(state.originForm.hasOwnProperty(key)){
                                state.originForm[key] = state.formData[key]
                            }
                            if(state.originForm.info.hasOwnProperty(key)){
                                state.originForm.info[key] = state.formData[key]
                            }
                            }
                            storesCalendarConfig.setEventForm(state.originForm)
                            reset()
                            close()
                            resolve('edit') 
                        }else{
                            homeCalendar.addGiveUpEntry(state.formData).then((res) => {
                                if (res.code === 0) {
                                    reset()
                                    close()
                                    resolve()
                                }else{
                                    reject()
                                }
                            });
                        }
                    } else {
                        reject()
                        console.log("error submit!", fields);
                    }
                });
            })
        };
        const reset = () => {
            if (!ruleFormRef) return
            ruleFormRef.value.resetFields()
        }
        watch(() => eventForm.value,
          val => {
            if(editId.value && val) {
              // 编辑
              nextTick(() => {
                const data = val
                if(!data) return
                state.originForm = data
                for(let params in data.info){
                  // 拿出info里面的数据
                  if(state.formData.hasOwnProperty(params)) {
                    state.formData[params] = data.info[params]
                  }
                }
                for(let key in data) {
                  // 列表里面的数据
                  if(state.formData.hasOwnProperty(key)) {
                    state.formData[key]= data[key]
                  }
                }
                if(data.remindType){
                  state.formData.remindType = data.remindType.split(',')
                }
              })
            }
          }        
        )
        onMounted(() => {
            // 获取所有的
            getListByType('').then(res => state.candidateList = res.data)
        })
        return {
            ...toRefs(state),
            submit,
            close,
            formRules,
            ruleFormRef,
            reset
        }
    }
}
</script>

<style>

</style>